#include <set>
#include <vector>
using namespace std;

// 空数组直接返回 0，非空则用 set 给 nums 去重并自动升序排序。
// 初始化最长长度 max=1、当前连续长度 lenth=1，用迭代器 cur 遍历 set，prev 记录前一个元素。
// 内层循环判断：若当前元素是 prev+1（连续），则 lenth 加 1，更新 max；若不连续，重置 lenth 为 1，更新 prev。
// 遍历结束返回 max，即最长连续序列长度。

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        if(nums.empty())
        {
            return 0;
        }
        set<int> s;
        for(auto e: nums)
        {
            s.insert(e);
        } 

        int max=1;
        int lenth = 1;
        int prev;
        set<int>::iterator cur = s.begin();
        prev = (*cur);
        while(cur!=s.end())
        {
            while(((++cur)!=s.end()) && prev+1 == (*cur))
            {
                lenth++;
                prev = *cur;
                if(lenth>max)
                {
                    max = lenth;
                }
            }
            if(cur==s.end())
            {
                break;
            }
            if(prev+1 != (*cur))
            {
                lenth = 1;
            }
            prev = *cur;   
        }
    return max;
    }
};